VB Sample Code for modifying parameter fields

Private Sub mnuEditParameterFields_Click()
Dim result%, jobnum%, mainjob%, paramCount%, paramN%
Dim ParameterFieldInfo As PEParameterFieldInfo

result% = PEOpenEngine()
If result% = 0 Then
MsgBox "Could not start the report engine. Execution must halt.", vbOKOnly + vbCritical, "Serious Error"
End
End If

jobnum% = PEOpenPrintJob(lblReportName.Caption) ' Name from label on sample form
ErrorTrap "OpenPrintJob in EditParameterFields", jobnum%

' Subreport check - if a subreport is currently selected on the main form, jobnum% becomes the subreport
If lblSubreportName.Visible Then
mainjob% = jobnum%
jobnum% = PEOpenSubreport(mainjob%, lblSubreportName.Caption)
ErrorTrap "OpenSubReport in EditParameterFields", mainjob%
End If

' Define the size of the structures
ParameterFieldInfo.StructSize = PE_SIZEOF_VARINFO_TYPE

' Get number of parameters
paramCount% = PEGetNParameterFields(jobnum%)
ErrorTrap "GetNParameterFields in EditParameterFields", jobnum%

If paramCount% < 1 Then
MsgBox "There are no field parameters in this report. Execution must halt.", vbOKOnly + vbCritical, "No Field Parameters"
Else
' If there are parameters, load them into the sections form
Load Sections
CenterForm Sample, Sections
Sections.Tag = "Field Parameter List"

For paramN% = 0 To paramCount% - 1
' Get parameter
result% = crPEGetNthParameterField(job, 0, ParameterFieldInfo.ValueType, ParameterFieldInfo.DefaultValueSet, ParameterFieldInfo.CurrentValueSet, ParameterFieldInfo.Name, ParameterFieldInfo.Prompt, ParameterFieldInfo.DefaultValue, ParameterFieldInfo.CurrentValue)
ErrorTrap "GetNthParameterField in EditParameterFields", jobnum%

' Put parameter into sections form
Sections!lstSections.AddItem ParameterFieldInfo.Name
Next paramN%

' Set up infinite loop to allow for modifying multiple parameters
Do While True
' Show form 1 ' Modally
Sections.Show 1 ' Modal

Select Case Sections.Tag
Case "Ok"
' Finished making changes, unload the parameter form and exit the loop
Unload Parameters
Exit Do
Case "Edit"
' Edit selected parameter
' Load parameter info into structure
result% = crPEGetNthParameterField(job, 0, ParameterFieldInfo.ValueType, ParameterFieldInfo.DefaultValueSet, ParameterFieldInfo.CurrentValueSet, ParameterFieldInfo.Name, ParameterFieldInfo.Prompt, ParameterFieldInfo.DefaultValue, ParameterFieldInfo.CurrentValue)
ErrorTrap "GetNthParameterField in EditParameterFields", jobnum%
' Load parameter form and fill it with the info from the structure
Load Parameters
CenterForm Sample, Parameters
Parameters!txtName.Text = ParameterFieldInfo.Name
Parameters!txtPrompt.Text = ParameterFieldInfo.Prompt
Parameters!cmbValueType.ListIndex = ParameterFieldInfo.ValueType
Parameters!txtDefaultValue.Text = ParameterFieldInfo.DefaultValue
Parameters!txtCurrentValue.Text = ParameterFieldInfo.CurrentValue
' Show parameter form 1 ' Modally
Parameters.Show 1 ' Modal
Select Case Parameters.Tag
Case "Ok"
' Save changes
ParameterFieldInfo.Name = Parameters!txtName.Text
ParameterFieldInfo.Prompt = Parameters!txtPrompt.Text
ParameterFieldInfo.ValueType = Parameters!cmbValueType.ListIndex
ParameterFieldInfo.DefaultValue = Parameters!txtDefaultValue.Text & Chr$(0)
ParameterFieldInfo.CurrentValue = Parameters!txtCurrentValue.Text & Chr$(0)
ParameterFieldInfo.DefaultValueSet = IIf(Parameters!chkDefaultValueSet.Value, True, False)
ParameterFieldInfo.CurrentValueSet = IIf(Parameters!chkCurrentValueSet.Value, True, False)
result% = crPESetNthParameterField(jobnum%, Sections!lstSections.ListIndex, ParameterFieldInfo.ValueType, ParameterFieldInfo.DefaultValueSet, ParameterFieldInfo.CurrentValueSet, ParameterFieldInfo.Name, ParameterFieldInfo.Prompt, ParameterFieldInfo.DefaultValue, ParameterFieldInfo.CurrentValue)
ErrorTrap "SetNthParameterField in EditParameterFields", jobnum%
Case "Cancel"
' Changes aren't saved
End Select
End Select
Loop

Unload Sections
End If

' Offer opportunity to see what you did to the report
If MsgBox("Do you want to preview the report?", vbYesNo + vbQuestion, "Preview Report?") = vbYes Then
' Simplified version of the custom-link preview routine (no custom buttons)
result% = PEOutputToWindow(jobnum%, "Field Parameters Demonstration Preview" & Chr$(0), CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0)
ErrorTrap "OutputtoWindow in EditParameterFields", jobnum%

result% = PEStartPrintJob(jobnum%, True)
ErrorTrap "StartPrintJob in EditParameterFields", jobnum%

result% = 1
Do While result% <> 0
DoEvents
DoEvents
result% = PEGetWindowHandle(jobnum%)
Loop
End If

' Close print job and engine
' Subreport check - if a subreport is currently open, call PreviewReport to offer a chance to
' preview the main report, then close the subreport and main report
If lblSubreportName.Visible Then
PreviewReport mainjob%
result% = PECloseSubreport(jobnum%)
ErrorTrap "CloseSubReport in EditParameterFields", mainjob%
PEClosePrintJob mainjob%
Else
PEClosePrintJob jobnum%
End If

PECloseEngine

MsgBox "Field Parameters Complete!", vbOKOnly, "Operation Succeeded"


End Sub
ActiveX
Private Sub mnuEditParameterFields_Click()
Dim ParamN As Integer, ParamName As String, ParamData As String
Dim hwndPreviewWindow As Long

CrystalReport1.ReportFileName = lblReportName.Caption ' Name from label on sample form

' Set up endless loop (only ends with an Exit Do) for editing multiple parameters
Do While True
ParamName = InputBox("Enter parameter number to edit. Press Cancel to end editing of parameters:", "Enter Parameter Number", Str$(ParamN))
' if a zero length string, then Cancel was pressed, exit the loop
If ParamName = "" Then Exit Do
' Otherwise a parameter number was entered, covert and collect data
ParamN = Val(ParamName)
ParamName = InputBox("Enter name of parameter to edit. Press Cancel to end editing of parameters:", "Enter Parameter Name", "")
If ParamName = "" Then Exit Do
ParamData = InputBox("Enter new value for parameter. Press Cancel to end editing of parameters:", "Enter Parameter Value", "")
If ParamData = "" Then Exit Do
CrystalReport1.ParameterFields(ParamN) = ParamName & ";" & ParamData
ParamN = ParamN + 1
Loop

' Offer opportunity to see what you did to the report
If MsgBox("Do you want to preview the report?", vbYesNo + vbQuestion, "Preview Report?") = vbYes Then
CrystalReport1.Destination = 0 ' Window
CrystalReport1.Action = 1 ' Print
ErrorTrap "ParameterFields"
hwndPreviewWindow = GetActiveWindow()
Do While IsWindow(hwndPreviewWindow)
DoEvents
Loop
End If

' Close the report
CrystalReport1.ReportFileName = ""

MsgBox "Field Parameters Complete!", vbOKOnly, "Operation Completed"


End Sub


Seagate Software IMG Holdings, Inc.
http://www.seagatesoftware.com
Support services:
http://support.seagatesoftware.com